Impara MATLAB in 10 Minuti
MATLAB (Matrix Laboratory) è un linguaggio di programmazione di alto livello e un ambiente progettato per il calcolo numerico, lo sviluppo di algoritmi e la visualizzazione dei dati. Sviluppato alla fine degli anni ‘70, MATLAB è diventato uno strumento fondamentale nell’ingegneria, nella scienza e nella matematica.
Questa guida copre le basi di MATLAB e ti aiuta a iniziare con questo potente ambiente di calcolo.
1. Il Tuo Primo Programma MATLAB
Crea un file script chiamato hello.m oppure digita i comandi direttamente nella finestra dei comandi MATLAB.
disp('Hello, World!')
Oppure usando la funzione fprintf:
fprintf('Hello, World!\n')
L’output sarà:
Hello, World!
La funzione disp() visualizza il contenuto direttamente, mentre fprintf() offre un controllo di formattazione maggiore, simile al printf del C.
2. Sintassi di Base
MATLAB ha le sue regole di sintassi che differiscono dalla maggior parte dei linguaggi di programmazione general-purpose. Capire queste basi è essenziale per scrivere codice pulito e manutenibile.
2.1 Commenti
I commenti su una singola riga iniziano con il simbolo del percento %:
% This is a comment
x = 10; % This assigns 10 to x
I commenti multi-riga usano %{ e %}:
%{
This is a multi-line comment.
It can span multiple lines.
%}
2.2 Punto e Virgola
Il punto e virgola ; sopprime la visualizzazione dell’output. Senza di esso, MATLAB mostra il risultato:
x = 5 % Displays: x = 5
y = 10; % No output, but y is assigned
2.3 Distinzione Maiuscole/Minuscole
MATLAB è case-sensitive. A e a sono variabili diverse:
A = 5;
a = 10;
disp(A) % Output: 5
disp(a) % Output: 10
2.4 Nomi delle Variabili
I nomi delle variabili devono iniziare con una lettera, seguiti da lettere, numeri o underscore:
valid_name = 1;
another_valid_name_123 = 2;
% 123invalid = 3; % Error: cannot start with number
2.5 Operazioni di Base
MATLAB eccelle nelle operazioni matriciali. Creare una matrice è semplice:
A = [1 2 3; 4 5 6; 7 8 9] % 3x3 matrix
Output:
A =
1 2 3
4 5 6
7 8 9
3. Variabili e Tipi di Dati
MATLAB usa il typing dinamico. Le variabili vengono create quando vengono assegnate e il loro tipo è determinato dal valore assegnato.
3.1 Tipi Numerici
MATLAB memorizza tutti i numeri come floating point a doppia precisione per impostazione predefinita:
% Integer
int_num = 42;
% Float
float_num = 3.14159;
% Scientific notation
sci_num = 2.5e-3; % 0.0025
3.2 Stringhe
Le variabili stringa usano gli apici singoli:
str = 'Hello, MATLAB';
str2 = "Hello, MATLAB"; % String array (R2016b+)
Concatenazione di stringhe:
str1 = 'Hello';
str2 = 'World';
combined = [str1 ', ' str2]; % 'Hello, World'
3.3 Logici (Boolean)
I valori logici sono true o false:
flag = true;
result = false;
% Logical operations
a = true;
b = false;
and_result = a && b; % false
or_result = a || b; % true
not_result = ~a; % false
3.4 Array di Caratteri vs Stringhe
MATLAB ha sia array di caratteri che oggetti stringa:
% Character array (older style)
char_arr = 'Hello';
% String object (modern style, R2016b+)
str_obj = "Hello";
% String objects are easier to work with
name = "Alice";
greeting = "Hello, " + name; % Works naturally
4. Strutture Dati
MATLAB offre diverse strutture dati per diversi casi d’uso.
4.1 Vettori
Un vettore è un array monodimensionale:
% Row vector
row_vec = [1 2 3 4 5];
% Column vector
col_vec = [1; 2; 3; 4; 5];
% Using colon operator
range_vec = 1:5; % [1 2 3 4 5]
step_vec = 0:2:10; % [0 2 4 6 8 10]
% linspace for evenly spaced values
lin_vec = linspace(0, 10, 5); % [0 2.5 5 7.5 10]
4.2 Matrici
Le matrici sono il fondamento di MATLAB:
% Direct matrix creation
A = [1 2 3; 4 5 6; 7 8 9];
% Accessing elements
element = A(2, 3); % Returns 6 (row 2, column 3)
% Matrix operations
B = A'; % Transpose
C = A * B; % Matrix multiplication
D = A .* B; % Element-wise multiplication
4.3 Cell Array
I cell array possono contenere tipi di dati diversi:
% Create a cell array
cell_arr = {1, 'hello', [1 2 3], true};
% Access cell contents using curly braces
data = cell_arr{2}; % Returns 'hello'
% Access cell using parentheses
sub_cell = cell_arr(1:2); % Returns {1, 'hello'}
4.4 Strutture
Le strutture sono come dizionari con campi denominati:
% Create a structure
student.name = 'John';
student.age = 20;
student.major = 'Engineering';
% Access fields
disp(student.name); % Output: John
% Array of structures
students(1).name = 'Alice';
students(1).age = 21;
students(2).name = 'Bob';
students(2).age = 22;
4.5 Tabelle
Le tabelle sono adatte per dati tabulari:
% Create a table
Age = [25; 30; 35];
Name = {'Alice'; 'Bob'; 'Charlie'};
Salary = [50000; 60000; 70000];
T = table(Name, Age, Salary);
% Access data
disp(T.Age);
disp(T.Name{1});
5. Operatori
MATLAB offre vari operatori per operazioni aritmetiche, di confronto e logiche.
5.1 Operatori Aritmetici
a = 10;
b = 3;
sum = a + b; % 13
diff = a - b; % 7
prod = a * b; % 30
quot = a / b; % 3.3333
int_div = floor(a/b); % 3
mod = mod(a, b); % 1 (remainder)
pow = a ^ b; % 1000
5.2 Operatori Element-wise
Gli operatori element-wise lavorano sugli elementi corrispondenti:
A = [1 2 3];
B = [4 5 6];
C = A .* B; % Element-wise: [4 10 18]
D = A.^2; % Element-wise square: [1 4 9]
5.3 Operatori di Confronto
x = 5;
y = 10;
eq = (x == y); % false
neq = (x ~= y); % true
gt = (x > y); % false
lt = (x < y); % true
ge = (x >= y); % false
le = (x <= y); % true
5.4 Operatori Logici
a = true;
b = false;
and_op = a & b; % false (element-wise AND)
or_op = a | b; % true (element-wise OR)
not_op = ~a; % false
and_short = a && b; % false (short-circuit AND)
or_short = a || b; % true (short-circuit OR)
6. Controllo del Flusso
MATLAB offre strutture di controllo del flusso standard, ma con una sintassi diversa dai linguaggi come Python.
6.1 if-elseif-else
score = 85;
if score >= 90
grade = 'A';
elseif score >= 80
grade = 'B';
elseif score >= 70
grade = 'C';
else
grade = 'F';
end
disp(grade) % Output: B
6.2 switch
L’istruzione switch confronta una singola espressione con più casi:
day = 'Monday';
switch day
case {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}
disp('Weekday');
case {'Saturday', 'Sunday'}
disp('Weekend');
otherwise
disp('Invalid day');
end
6.3 Cicli for
Il ciclo for itera su un intervallo o array:
% Iterating over a range
for i = 1:5
disp(i);
end
% Iterating over an array
fruits = {'apple', 'banana', 'orange'};
for fruit = fruits
disp(fruit{1});
end
% Nested loops for matrix operations
A = [1 2; 3 4];
B = zeros(2, 2);
for i = 1:2
for j = 1:2
B(i, j) = A(i, j) * 2;
end
end
6.4 Cicli while
count = 0;
while count < 5
disp(count);
count = count + 1;
end
6.5 Controllo dei Cicli
L’istruzione break esce dal ciclo, e continue salta all’iterazione successiva:
% Using break
for i = 1:10
if i == 5
break;
end
disp(i);
end
% Output: 1 2 3 4
% Using continue
for i = 1:5
if mod(i, 2) == 0
continue; % Skip even numbers
end
disp(i);
end
% Output: 1 3 5
7. Input e Output
7.1 Input dell’Utente
Usa la funzione input() per ottenere l’input dell’utente:
% Get numeric input
num = input('Enter a number: ');
% Get string input
name = input('Enter your name: ', 's');
% Get expression input (evaluates the input)
expr = input('Enter an expression: ');
7.2 Visualizzazione dell’Output
Diverse funzioni visualizzano l’output:
% disp - simple display
disp('Hello');
disp([1 2 3]);
% fprintf - formatted output
name = 'Alice';
age = 25;
fprintf('Name: %s, Age: %d\n', name, age);
% sprintf - create formatted string
str = sprintf('Value: %.2f', 3.14159);
disp(str);
7.3 Specificatori di Formato
Specificatori di formato comuni in MATLAB:
% %s - string
% %d - integer
% %f - floating point
% %.2f - floating point with 2 decimal places
% %e - scientific notation
fprintf('%d %.2f %e\n', 42, 3.14159, 1000)
% Output: 42 3.14 1.000000e+03
8. Funzioni
Le funzioni in MATLAB sono tipicamente definite in file separati, ma le funzioni anonime forniscono creazione di funzioni inline.
8.1 Funzioni Anonime
Le funzioni anonime creano funzioni semplici senza file separati:
% Single input
square = @(x) x^2;
disp(square(5)); % Output: 25
% Multiple inputs
add = @(x, y) x + y;
disp(add(3, 4)); % Output: 7
% Multiple expressions
hypot = @(x, y) sqrt(x^2 + y^2);
disp(hypot(3, 4)); % Output: 5
8.2 File di Funzione
Crea un file chiamato myfunc.m:
function y = myfunc(x)
y = x^2 + 1;
end
Chiama la funzione:
result = myfunc(5); % Output: 26
8.3 Funzioni con Multipli Output
function [sum, prod] = calc(x, y)
sum = x + y;
prod = x * y;
end
Chiama con multipli output:
[s, p] = calc(3, 4);
disp(s); % 7
disp(p); % 12
8.4 Argomenti Variabili
Usa varargin e varargout per argomenti variabili:
function result = sum_all(varargin)
result = 0;
for i = 1:length(varargin)
result = result + varargin{i};
end
end
% Call with any number of arguments
total = sum_all(1, 2, 3, 4, 5); % Output: 15
9. File Script
Gli script sono file .m che contengono una sequenza di comandi MATLAB. Operano sui dati nel workspace:
% save as myscript.m
% Calculate statistics for a dataset
data = [1 2 3 4 5 6 7 8 9 10];
mean_val = mean(data);
std_val = std(data);
max_val = max(data);
min_val = min(data);
fprintf('Mean: %.2f\n', mean_val);
fprintf('Std: %.2f\n', std_val);
fprintf('Max: %d\n', max_val);
fprintf('Min: %d\n', min_val);
10. Gestione degli Errori
Usa try-catch per la gestione degli errori:
try
result = risky_operation();
catch ME
fprintf('Error: %s\n', ME.message);
% Handle the error
result = 0;
end
Usare error() per sollevare errori:
function result = divide(a, b)
if b == 0
error('Division by zero is not allowed');
end
result = a / b;
end
11. Operazioni sui File
11.1 Salvataggio e Caricamento dei Dati
% Save variables to file
x = [1 2 3];
y = 'hello';
save('data.mat', 'x', 'y');
% Load variables from file
load('data.mat');
% Save to text file
writematrix(x, 'data.txt');
% Read from text file
data = readmatrix('data.txt');
11.2 Operazioni su File di Testo
% Write to text file
fid = fopen('output.txt', 'w');
fprintf(fid, 'Line 1\n');
fprintf(fid, 'Line 2\n');
fclose(fid);
% Read from text file
fid = fopen('output.txt', 'r');
while ~feof(fid)
line = fgetl(fid);
if ischar(line)
disp(line);
end
end
fclose(fid);
Usare textscan per lettura strutturata:
fid = fopen('data.txt', 'r');
format = '%s %d %f';
C = textscan(fid, format);
fclose(fid);
name = C{1};
age = C{2};
score = C{3};
12. Grafici
Le capacità di plotting di MATLAB sono una delle sue caratteristiche più forti.
12.1 Grafici 2D Base
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y);
xlabel('x');
ylabel('sin(x)');
title('Sine Wave');
grid on;
12.2 Multipli Grafici
x = 0:0.1:2*pi;
% Subplots
subplot(2, 1, 1);
plot(x, sin(x));
title('Sine');
subplot(2, 1, 2);
plot(x, cos(x));
title('Cosine');
12.3 Personalizzazione dei Grafici
x = 0:0.1:10;
y1 = x;
y2 = x.^2;
plot(x, y1, 'b-', 'LineWidth', 2); % Blue solid line
hold on;
plot(x, y2, 'r--', 'LineWidth', 2); % Red dashed line
hold off;
xlabel('X');
ylabel('Y');
legend('Linear', 'Quadratic');
title('Linear vs Quadratic');
grid on;
12.4 Altri Tipi di Grafici
% Bar chart
bar([1 2 3 4], [10 20 15 25]);
% Histogram
data = randn(1000, 1);
histogram(data, 30);
% Scatter plot
x = rand(100, 1);
y = 2*x + randn(100, 1)*0.1;
scatter(x, y);
